package cn.lin.factory;
/**
 * @author liufl E-mail:Huberier@allpyra.com
 * @version 创建时间：2017年8月21日 下午10:02:26
 * 状态模式将各个状态所对应的操作分离开来，即对于不同的状态，由不同的子类实现具体操作，不同状态的切换由子类实现，
 * 	        当发现传入参数不是自己这个状态所对应的参数，则自己给Context类切换状态；而策略模式是直接依赖注入到Context类的参数进行选择策略，不存在切换状态的操作练习
	联系：状态模式和策略模式都是为具有多种可能情形设计的模式，把不同的处理情形抽象为一个相同的接口，符合对扩展开放，对修改封闭的原则。
	还有就是，策略模式更具有一般性一些，在实践中，可以用策略模式来封装几乎任何类型的规则，只要在分析过程中听到需要在不同实践应用不同的业务规则，
	就可以考虑使用策略模式处理，在这点上策略模式是包含状态模式的功能的，策略模式是一个重要的设计模式
 */
public class StateCodeContext {

	private StateCodeState state;
	
	public StateCodeContext(StateCodeState state){
		this.state = state;
	}
	
	public void changeState(){
		state.action(this);
	}

	public StateCodeState getState() {
		return state;
	}

	public void setState(StateCodeState state) {
		this.state = state;
	}
	
	public static void main(String[] args) {
		StateCodeContext context = new StateCodeContext(new StateCodeStateClose());
		context.changeState();
		context.changeState();
		context.changeState();
		context.changeState();
	}
}

